//atoi()函数
//int  atoi(const char* str);从函数参数和返回值可以看到它的作用是把字符串转化为一个整型，
//注意的是：传入的字符串不能为空字符和其他字母的字符串，只能传数字字符串，而且数字字符串不能太长，
//会超过整型的数值范围，超过了就返回随机值。

// #include<stdio.h>
// #include<stdlib.h>
// int main()
// {
//     printf("%d\n",atoi(" "));//传入空字符——》输出：0
//     printf("%d\n",atoi("abcd"));//传入字母字符串——》0
//     printf("%d\n",atoi("   666"));//传入前面是空字符后面是数字字符——》666
//     printf("%d\n",atoi("+888"));//加上符号的字符串——》888
//     printf("%d\n",atoi("-555"));//——》-555
//     printf("%d\n",atoi("   a123"));//——》0
//     printf("%d\n",atoi("   1  2   3"));//——》123
//     printf("%d\n",atoi("123abc"));//——》123
//     printf("%d\n",atoi("45678999999999"));//传入很大的数字字符串——》2022809039
//     return 0;
// }


//模拟实现atoi()
/*特殊情况
1.空指针
2.空字符串
3.字符串中的空格
4.非数字字符
5.溢出问题（所得数字大于INT_MAX或者小于INT_MIN）
6.正负号问题*/
#include<stdio.h>
#include<ctype.h>
#include<limits.h>
#include<assert.h>
int my_atoi(const char* str)
{
    //判断是否为空指针
    assert(str);
    //判断是否为空字符串
    if(*str=='\0')
    {
        return 0;
    }
    //判断字符串中的空格
    while(*str==' ')
    {
        str++;
    }
    //正负号情况
    int flag=1;//符号标志
   if(*str=='+')
   {
        flag=1;
        str++;
   }
   if(*str=='-')
   {
        flag=-1;
        str++;
   }
   long long number=0;
   while(*str!='\0')
   {
        //是否为数字
        if(isdigit(*str))
        {
            number=number*10+(*str-'0');
            //判断是否溢出
            if(number>INT_MAX)
            {
                return INT_MAX;
                break;
            }
            if(number<INT_MIN)
            {
                return INT_MIN;
                break;
            }
        }
        //若不是数字
        else
        {
            //直接跳出循环
            break;
        }
        str++;
   }
   number*=flag;
   return (int)number;
}
int main()
{
    printf("%d\n",my_atoi(" "));
    printf("%d\n",my_atoi("abcd"));
    printf("%d\n",my_atoi("   123"));
    printf("%d\n",my_atoi("a123"));
    printf("%d\n",my_atoi("-123"));
    printf("%d\n",my_atoi("+123"));
    printf("%d\n",my_atoi("1  2  3"));
    printf("%d\n",my_atoi("123567899999"));
    return 0;
}